#!/bin/bash
#
#   Copyright(c) 2013-2016, Wind River Systems, Inc. 
#
#   Redistribution and use in source and binary forms, with or without
#   modification, are permitted provided that the following conditions
#   are met:
#
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above copyright
#       notice, this list of conditions and the following disclaimer in
#       the documentation and/or other materials provided with the
#       distribution.
#     * Neither the name of Wind River Systems nor the names of its
#       contributors may be used to endorse or promote products derived
#       from this software without specific prior written permission.
#
#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
#   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
#   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#


# Query the metadata server for the set of cpus that are supposed to be offline
# It will be in the form "set([])" for the empty set, and "set([1, 2, 3])" for the
# non-empty set.
CPUSET_OFFLINE=`wget -qO - http://169.254.169.254/latest/meta-data/offline_cpuset`
RC=$?
if [ $RC -ne 0 ]
then
    logger -p daemon.err "${0}: unable to obtain "offline_cpuset" value.  rc: ${RC}"
    exit -1
fi

OFFLINE_CPUS=`echo ${CPUSET_OFFLINE}|grep -o [0-9]`
for CPU in $OFFLINE_CPUS
do
    # Offline this cpu to match the underlying virtual machine.
    echo 0 > /sys/devices/system/cpu/cpu${CPU}/online
    RC=$?
    if [ $RC -ne 0 ]
    then
        logger -p daemon.err "${0}: unable to offline cpu ${CPU}.  rc: ${RC}"
        exit -1
    fi
done
